package tuc.lagerplan.gui.thmopt;

import org.apache.log4j.Logger;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;

import com.lagerplan.transporthilfsmitteloptimierung.data.Gesamtergebnis;
import com.lagerplan.model.thmopt.ArtikelOberklasse;
import com.lagerplan.transporthilfsmitteloptimierung.data.ArtikelOberklasseCollection;
import com.lagerplan.model.thmopt.ArtikelUnterklasse;
import com.lagerplan.transporthilfsmitteloptimierung.data.ArtikelUnterklasseCollection;


public class FoerderhilfsmittelzuordnungBrowserContentProvider implements ITreeContentProvider {

	  private static final Object[] EMPTY = new Object[] {};

	  // Logging whats going on
	  private static Logger logger = Logger.getLogger( FoerderhilfsmittelzuordnungBrowserContentProvider.class );
		
	  /**
	   * Gets the children for a team or player
	   * 
	   * @param arg0
	   *            the team or player
	   * @return Object[]
	   */
	  public Object[] getChildren(Object arg0) {
		  if (arg0 instanceof ArtikelOberklasseCollection) {
			  logger.debug("(getChildren) of ArtikelOberklasseCollection...");
			  Object[] test = ( ((ArtikelOberklasseCollection) arg0).toArray() );
			  return ((ArtikelOberklasseCollection) arg0).toArray();
		  }
		  if (arg0 instanceof ArtikelOberklasse){
			  logger.debug("(getChildren) of ArtikelOberklasse...");
			  Object[] test = ((ArtikelOberklasse) arg0).getArtikelUnterklasseCollection().toArray();
			  return ((ArtikelOberklasse) arg0).getArtikelUnterklasseCollection().toArray();
		  }
		  if (arg0 instanceof ArtikelUnterklasseCollection){
			  logger.debug("(getChildren) of ArtikelUnterklasseCollection...");
			  Object[] test = ( ((ArtikelUnterklasseCollection) arg0).toArray() );
			  return ((ArtikelUnterklasseCollection) arg0).toArray();
		  }
		  if (arg0 instanceof ArtikelUnterklasse ){
			  logger.debug("(getChildren) of ArtikelUnterklasse...");
			  Object[] test = ( ((ArtikelUnterklasse) arg0).getZuordnungsvarianten().toArray() );
			  return ( ((ArtikelUnterklasse) arg0).getZuordnungsvarianten().toArray() );
		  }
		  /*
		  if (arg0 instanceof Gesamtergebnis ){
			  logger.debug("(getChildren) of Gesamtergebnis...");
			  return ( ((Gesamtergebnis) arg0).getZuordnungsvarianten().toArray() );
		  }
		  */  
	    // Players have no children . . . except Shawn Kemp
	    return EMPTY;
	  }

	  /**
	   * Gets the parent 
	   * Muss man wirklich immer mit Elternelement verbandeln??? 
	   * @param arg0
	   *            the player
	   * @return Object
	   */
	  public Object getParent(Object arg0) {
		  
		  //if (arg0 instanceof ArtikelUnterklasse)
		  logger.debug("(getParent) of ArtikelUnterklasse...");
			  return ((ArtikelUnterklasse) arg0).getRefOberklasse();
	    //return EMPTY;
	  }

	  /**
	   * Gets whether this team or player has children
	   * 
	   * @param arg0
	   *            the team or player
	   * @return boolean
	   */
	  public boolean hasChildren(Object arg0) {
	    return getChildren(arg0).length > 0;
	  }

	  /**
	   * Gets the elements for the table
	   * 
	   * @param arg0
	   *            the model
	   * @return Object[]
	   */
	  public Object[] getElements(Object arg0) {
	    // Returns all the teams in the model
	    //return ((PlayerTableModel) arg0).teams;
		  return getChildren(arg0);
	  }

	  /**
	   * Disposes any resources
	   */
	  public void dispose() {
	    // We don't create any resources, so we don't dispose any
	  }

	  /**
	   * Called when the input changes
	   * 
	   * @param arg0
	   *            the parent viewer
	   * @param arg1
	   *            the old input
	   * @param arg2
	   *            the new input
	   */
	  public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
	    // Nothing to do
	  }
}
